package com.xiaomaoguai.app.utils;


/*
 * @Description :
 * @FileName: GpsConvertor.java
 * @Author :WeiHui.Zhang
 * @Data : 2014年12月15日 下午3:00:29
 * @Version:1.0.0
 */
public class GpsConvertor {

	/**
	 * 经纬度转墨卡托 1、http://www.cnblogs.com/liongis/archive/2012/06/13/2548061.html
	 * 2、https://gist.github.com/aisk/3735854
	 * 
	 * @param lngLat
	 * @return
	 */
	public static Mercator lnglat2Mercator(Lnglat lngLat) {
		Mercator m = new Mercator(0, 0);
		double x = lngLat.lng * 20037508.34 / 180;
		double y = Math.log(Math.tan((90 + lngLat.lat) * Math.PI / 360)) / (Math.PI / 180);
		y = y * 20037508.34 / 180;
		m.lng = x;
		m.lat = y;
		return m;
	}

	/**
	 * 墨卡托转经纬度 1、http://www.cnblogs.com/liongis/archive/2012/06/13/2548061.html
	 * 2、https://gist.github.com/aisk/3735854
	 */
	public static Lnglat mercator2Lnglat(Mercator m) {
		Lnglat lngLat = new Lnglat(0, 0);
		double x = m.lng / 20037508.34 * 180;
		double y = m.lat / 20037508.34 * 180;
		y = 180 / Math.PI * (2 * Math.atan(Math.exp(y * Math.PI / 180)) - Math.PI / 2);
		lngLat.lng = x;
		lngLat.lat = y;
		return lngLat;
	}

	public static double distance(Lnglat l1, Lnglat l2) {
		double jl_jd = 102834.74258026089786013677476285;
		double jl_wd = 111712.69150641055729984301412873;
		double b = Math.abs((l1.lng - l2.lng) * jl_jd);
		double a = Math.abs((l1.lat - l2.lat) * jl_wd);
		return Math.sqrt((a * a + b * b));
	}

}
